/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controlador;

import Juego.Jugador;
import Juego.Partida;
import Vista.Interfaz;
import Vista.VistaInicial;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;

/**
 *
 * @author Flor
 */
public class Controlador {

    private static Controlador instancia;

    public static Controlador darInstancia() {
        if (instancia == null) {
            instancia = new Controlador();
        }
        return instancia;
    }
    private VistaInicial vistaIni;
    private Interfaz vista;
    private Partida partida;

    //GETTERS AND SETTERS
    public Partida getPartida() {
        return partida;
    }

    public void setPartida(Partida partida) {
        this.partida = partida;
    }

    public Interfaz getVista() {
        return vista;
    }

    public void setVista(Interfaz vista) {
        this.vista = vista;
    }

    public VistaInicial getVistaIni() {
        return vistaIni;
    }

    public void setVistaIni(VistaInicial vistaIni) {
        this.vistaIni = vistaIni;
    }

    private Controlador() {
    }
    public String dificultad;
    public String nombre;

    public void iniciarVista() {
        vista.setVisible(true);
        vistaIni.setTitle("Ingrese su nombre");
        vistaIni.setLocationRelativeTo(null);
        vistaIni.setVisible(true);
        vistaIni.toFront();

        //Boton Aceptar
        vistaIni.btnAceptar.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                if (!vistaIni.txtNombre.getText().equals("")) {
                    if (vistaIni.cBoxDif.getSelectedIndex() != 0) {
                        vistaIni.setVisible(false);
                        nombre = vistaIni.txtNombre.getText();
                        dificultad = String.valueOf(vistaIni.cBoxDif.getSelectedItem());
                        partida.inicializarJugadores(nombre, dificultad);
                        iniciarPartida();
                    } else {
                        vistaIni.lblError.setText("Seleccione dificultad por favor");
                    }
                } else {
                    vistaIni.lblError.setText("Ingrese su nombre por favor");
                }
            }
        });
        //Combo Box
        vistaIni.cBoxDif.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                if (vistaIni.cBoxDif.getSelectedIndex() != 0) {
                    vistaIni.lblError.setText("");
                }
            }
        });

        //Deja invisible ciertos labels y botones
        vista.lblDealer8.setVisible(false);
        vista.lblDealer7.setVisible(false);
        vista.lblDealer6.setVisible(false);
        vista.lblDealer5.setVisible(false);
        vista.lblDealer4.setVisible(false);
        vista.lblDealer3.setVisible(false);
        vista.lblDealer2.setVisible(false);
        vista.lblDealer1.setVisible(false);
        {
            //BOTON APOSTAR
            vista.btnApostar.addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent e) {


                    if (vista.txtApuestaJug.getText().isEmpty() == false && Integer.valueOf(vista.txtApuestaJug.getText()) > partida.getMesa().getUltimoAp().getuApuesta()) {
                        vista.lblError.setText("");
                        activarBotones(false);
                        partida.humanoAumenta(Integer.valueOf(vista.txtApuestaJug.getText()));
                        //Partida.darInstancia().rondaDeApuestas(null, true, "aumento", Integer.valueOf(vista.txtApuestaJug.getText()));

                    } else {
                        vista.lblError.setText("Error.su apuesta es nula o no es mayor a la apuesta minima");
                    }

                }
            });
            //BOTON IGUALAR
            vista.btnIgualar.addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent e) {
                    vista.btnApostar.setEnabled(false);
                    vista.btnIgualar.setEnabled(false);
                    vista.btnPasar.setEnabled(false);
                    vista.btnRetirarse.setEnabled(false);
                    //Partida.darInstancia().rondaDeApuestas(null, true, "igualo", 0);
                    partida.humanoIguala();

                }
            });
            //BOTON PASAR
            vista.btnPasar.addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent e) {
                    vista.btnApostar.setEnabled(false);
                    vista.btnIgualar.setEnabled(false);
                    vista.btnPasar.setEnabled(false);
                    vista.btnRetirarse.setEnabled(false);
                    // Partida.darInstancia().rondaDeApuestas(null, true, "paso", 0);
                    partida.humanoPasa();

                }
            });
            //BOTON RETIRARSE
            vista.btnRetirarse.addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent e) {
                    vista.btnApostar.setEnabled(false);
                    vista.btnIgualar.setEnabled(false);
                    vista.btnPasar.setEnabled(false);
                    vista.btnRetirarse.setEnabled(false);
                    //   Partida.darInstancia().rondaDeApuestas(null, true, "retiro", 0);
                    partida.humanoRetira();
                }
            });
        }
    }

    public void iniciarPartida() {

        mostrarMensaje("Se inicia la partida");
        partida.iniciarPartida();
    }

    public void mostrarMensaje(String mensaje) {
        File file = new File("");
        String ruta = file.getAbsolutePath() + "\\src\\Img\\icono.png";
        ImageIcon icono = new ImageIcon(ruta);
        String string1 = "Aceptar";
        Object[] opciones = {string1};
        int n = JOptionPane.showOptionDialog(null,
                mensaje,
                "Poker",
                JOptionPane.YES_OPTION,
                JOptionPane.QUESTION_MESSAGE,
                icono,
                opciones,
                string1);
        if (n == JOptionPane.CLOSED_OPTION) {
            System.exit(0);
        }

    }

    public void activarBotones(boolean aux) {

        vista.txtApuestaJug.setEnabled(aux);
        vista.btnApostar.setEnabled(aux);
        vista.btnIgualar.setEnabled(aux);
        vista.btnPasar.setEnabled(aux);
        vista.btnRetirarse.setEnabled(aux);
    }

    public Integer pedirRespuesta(Integer ultAp, Integer montoDisp) {
        try {
            if (montoDisp < ultAp) {
                mostrarMensaje("No le alcanza el dinero, apuesta todo lo que tiene");
                return montoDisp;
            } else {
                Integer n = Integer.parseInt(JOptionPane.showInputDialog(null, "Ingrese el monto de su apuesta", "Poker", JOptionPane.PLAIN_MESSAGE));
                if (n <= montoDisp) {
                    if (n <= ultAp) {
                        mostrarMensaje("Ingrese un valor mayor a lo apostado");
                        return pedirRespuesta(ultAp, montoDisp);
                    } else {
                        return n;
                    }
                } else {
                    mostrarMensaje("NO LE ALCANZ SU DINERO");
                    return pedirRespuesta(ultAp, montoDisp);
                }
            }
        } catch (Exception e) {
            mostrarMensaje("Ingrese sólo números por favor");
            return pedirRespuesta(ultAp, montoDisp);
        }


    }

    public boolean confirmarPrestamo() {
        boolean res = false;

        int n = JOptionPane.showConfirmDialog(vista, "Quiere pedir el Prestamo de 100 creditos?");

        if (n == 0) {
            res = true;
        }

        return res;
    }

    public String pedirApuesta() {

        File file = new File("");
        String ruta = file.getAbsolutePath() + "\\src\\Img\\icono.png";
        ImageIcon icono = new ImageIcon(ruta);
        String string1 = "Aumentar";
        String string2 = "Igualar";
        String string3 = "Pasar";
        Object[] opciones = {string1, string2, string3};
        int n = JOptionPane.showOptionDialog(null,
                "Cual es su apuesta?, cerrar para retirarse",
                "Apuesta",
                JOptionPane.YES_NO_CANCEL_OPTION,
                JOptionPane.QUESTION_MESSAGE,
                icono,
                opciones,
                string1);
        if (n == JOptionPane.YES_OPTION) {
            return string1;
        } else if (n == JOptionPane.NO_OPTION) {
            return string2;
        } else if (n == JOptionPane.CANCEL_OPTION) {
            return string3;
        } else {
            return "Retirarse";
        }
    }
}
